var fs = require('fs')

function readFile_promise(path) {
  return new Promise((resolve, reject) => {
    fs.readFile(path, (err, data) => {
      if (err) {
        reject(new Error('Error'))
      } else {
        resolve(data.toString())
      }
    })
  })
}

var arr = ['../bar.txt', '../baz.txt', '../foo.txt']

async function readFile() { // 按顺序输出  for ... of ...循环也同理
  for (let i = 0; i < arr.length; i++) {
    var result = await readFile_promise(arr[i])
    console.log(result)
  }
}
// readFile()

function readFile_1() {  // forEach循环不一定按顺序输出
  arr.forEach(async item => {
    var result = await readFile_promise(item)
    console.log(result)
  })
}
// readFile_1()


// 如果异步方法的执行全部都变成串行的话，就不能发挥出Node非阻塞IO的优势了。如果想要使用并行来提高执行
// 效率，那么需要使用Promise.all()

async function readFile_2() {
  var list = arr.map(async item => await readFile_promise(item))
  var result = await Promise.all(list)
  console.log(result)
}

readFile_2()
